#ifndef FILEMANAGEDELEGATE_H
#define FILEMANAGEDELEGATE_H

#include <QObject>
#include <QDir>
#include "filemanagedelegate_global.h"
#include <QHash>


class FileManage;

class FILEMANAGEDELEGATESHARED_EXPORT FileManageDelegate : public QObject
{
    Q_OBJECT

public:
    FileManageDelegate(FileManage *fileManageIn);
    ~FileManageDelegate();

public slots:

     void ftpError_slot(QString info);

    /**
     * @brief getFileList_Slot              获取远程文件列表
     * @param isDirectory                   文件列表信息
     * @param listFtpDirectory              访问目录(服务器端)
     * @param listGetFileClientPath         访问目录(客户端)
     */
    void getFileList_Slot(const QHash<QString, bool> isDirectory, const QString& listFtpDirectory, const QString& listGetFileClientPath);

    /**
     * @brief downloadFile_Slot             下载文件槽函数
     */
    void downloadFile_Slot();

    /**
     * @brief uploadFile_Slot               上传文件槽函数
     */
    void uploadFile_Slot();

    /**
     * @brief getFileListInfo_Slot          获取文件列表信息
     * @param fileType                      文件类型
     */
    void getFileListInfo_Slot(QString  dirPath);
    void setLocalFileDir_slot(QString  dirPath);

    /**
     * @brief isGetFileFinished_Slot        文件是否下载完成响应槽函数
     * @param status                        完成状态(true:下载完成  false:下载失败)
     * @param message                       消息
     */
    void isGetFileFinished_Slot(bool status, const QString& message);

    /**
     * @brief isPutFileFinished_Slot        文件是否上传完成响应槽函数
     * @param status                        完成状态
     * @param message                       消息
     */
    void isPutFileFinished_Slot(bool status, const QString& message);

    /**
     * @brief removeFile_Slot               删除文件
     */
    void removeLocalFile_Slot();
    void removeRemoteFile_Slot();

    /**
     * @brief removeFtpFile_Slot           删除远程文件
     * @param status                       完成状态
     * @param message                       消息
     */
    void removeFtpFile_Slot(bool status, const QString& message);

private:


    /**
     * @brief updateServerFileList          更新远程文件列表信息显示到控件上
     * @param fileType                      文件类型
     */
    void updateServerFileList(QString dir);

    /**
     * @brief caseInsensitiveLessThan       文件列表排序
     * @param s1
     * @param s2
     * @return
     */
    static bool caseInsensitiveLessThan(const QString &s1, const QString &s2);



private:

    /**
     * @brief fileManage                    文件管理模块视图对象
     */
    FileManage *fileManage;

    /**
     * @brief fileInfoList              保存要操作的文件列表
     */
    QList <QString> fileInfoList;

    /**
     * @brief currentFileType           当前文件类型
     */
    QString localFileDir;
    QString remoteFileDir;




    /**
     * @brief currentFileIndex          当前文件在文件列表的索引值
     */
    int currentFileIndex;

    /**
     * @brief removeFilePath            进行删除操作文件路径
     */
    QString removeFilePath;
};

#endif // FILEMANAGEDELEGATE_H
